package com.sugon.service;

import com.sugon.entity.SysProcessInfoEntity;
import com.sugon.entity.SysUserEntity;
import com.sugon.modules.sparepart.model.vo.SpareNeedsPlanApproveProcessVO;
import com.sugon.utils.ProcessInfoEnum;

import java.util.List;
import java.util.Map;

/**
 * 流程信息Service接口
 * 一般只记录审批流程
 *
 * @author sugon
 * @date 2019-08-03 21:20:31
 */
public interface SysProcessInfoService {

    /**
     * 删除某个流程类别下的流程信息
     *
     * @param processInfoEnum 流程类别
     * @param dataId          业务记录ID
     * @return
     */
    int delete(ProcessInfoEnum processInfoEnum, String dataId);

    /**
     * 只获取指定业务的审批列表
     * 只获取审批信息
     *
     * @param bussinessId
     * @return
     */
    List<SpareNeedsPlanApproveProcessVO> getApproveList(String bussinessId);

    /**
     * 根据主键查询实体
     *
     * @param id 主键
     * @return 实体
     */
    SysProcessInfoEntity queryObject(String id);

    /**
     * 分页查询
     *
     * @param map 参数
     * @return list
     */
    List<SysProcessInfoEntity> queryList(Map<String, Object> map);

    /**
     * 分页统计总数
     *
     * @param map 参数
     * @return 总数
     */
    int queryTotal(Map<String, Object> map);

    /**
     * 保存实体
     *
     * @param sysProcessInfo 实体
     * @return 保存条数
     */
    int save(SysProcessInfoEntity sysProcessInfo);

    /**
     * 根据主键更新实体
     *
     * @param sysProcessInfo 实体
     * @return 更新条数
     */
    int update(SysProcessInfoEntity sysProcessInfo);

    /**
     * 根据主键删除
     *
     * @param id
     * @return 删除条数
     */
    int delete(String id);

    /**
     * 根据主键批量删除
     *
     * @param ids
     * @return 删除条数
     */
    int deleteBatch(String[] ids);

    /**
     * 开启流程
     *
     * @param processType 流程类别
     * @param dataId      关联数据项ID
     * @param remark      备注
     */
    void startProcess(ProcessInfoEnum processType, String dataId, String remark);

    SysProcessInfoEntity saveProcessInfo(String processId, String dataId, ProcessInfoEnum approvalType, Integer status, String newApproverId, String remark, Integer isEnd);

    /**
     * 封装保存方法
     */
    int saveProcessInfo(String processId, ProcessInfoEnum approvalType, Integer status, String newApproverId);


    int saveProcessInfo(String processId, ProcessInfoEnum approvalType, Integer status, String newApproverId, String remark);

    int saveProcessInfoApi(String processId, ProcessInfoEnum approvalType, Integer status, String newApproverId, String remark, SysUserEntity loginUser);

    int saveProcessInfoApi2(String processId, ProcessInfoEnum approvalType, Integer status, String newApproverId, String remark, String userId, String deptId);

    int updateOutTime(SysProcessInfoEntity sysProcessInfo);

    int saveProcessInfoBySys(String processId, ProcessInfoEnum approvalType, Integer status, String newApproverId, String remark);

    int getOver(String id);
}
